package com.oop.ch10;

import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Scanner;

public class Test {
	
	public static void main(String[] args) {
		// selectOne();
		double a=0.1;
		double b=0.4;
		System.out.println(a+b);
		
		BigDecimal m=new BigDecimal("0.1");
		BigDecimal n=new BigDecimal("0.2");
		BigDecimal r=m.add(n);
		System.out.println(r.doubleValue());
		
		String str_birthday="2012-11-06";
		try {
			Calendar calendar=Calendar.getInstance();
			int now_year=calendar.get(Calendar.YEAR);//获取当前年
			int now_month=calendar.get(Calendar.MONTH)+1;//获取当前年
			int now_day=calendar.get(Calendar.DAY_OF_MONTH);//获取当前年
			System.out.println(now_year+"-"+now_month+"-"+now_day);
			//########################################################
			SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
			calendar.setTime(sdf.parse(str_birthday));
			int birthday_year=calendar.get(Calendar.YEAR);//获取当前年
			int birthday_month=calendar.get(Calendar.MONTH)+1;//获取当前年
			int birthday_day=calendar.get(Calendar.DAY_OF_MONTH);//获取当前年
			System.out.println(birthday_year+"-"+birthday_month+"-"+birthday_day);
			//########################################################
			int age=now_year-birthday_year;
			//12            11
			if(birthday_month>now_month){
				age--;
			}else if(birthday_month==now_month){
				//09        10
				if(birthday_day>now_day){
					age--;
				}
			}
			System.out.println(age);
			
			
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}
	
	/**
	 * 注册：
	 *  1、手机号
	 *  2、密码
	 *  3、性别
	 *  4、年龄--- 出生年月日
	 *  5、昵称
	 *  6、注册时间 不允许用户填写
	 */
	public static void reg(){
		//part1 获取用户输入的登录信息
		Scanner input=new Scanner(System.in);
		System.out.print("请输入您的账号(使用手机号作为账号)：");
		String mobile=input.next();
		//part2 服务器后台数据验证
		if(mobile==null || mobile.trim().length()==0){
			System.err.println("您没有输入账号，请您输入账号再注册");
			return;
		}
		if(mobile.trim().length()!=11){
			System.err.println("您输入的手机账号长度不是11位，请您检查后再试");
			return;
		}
		try {
			Long.parseLong(mobile);//校验手机号是不是纯数字
		}catch (Exception e){
			System.err.println("您输入的手机账号有误，请检查后再试");
			return;
		}
		if(!mobile.substring(0,1).equals("1")){
			System.err.println("您输入的手机账号首位不是1，请检查后再试");
			return;
		}
		//#####################输入和验证密码部分##########################################################
		System.out.print("请输入您的密码(密码长度在3到10个字符之间)：");
		String password1=input.next();
		//密码 重复密码
		if(password1==null || password1.trim().length()==0){
			System.err.println("您输入的密码为空，请输入密码再试");
			return;
		}
		if(password1.length()<3 || password1.length()>10){
			System.err.println("您输入的密码长度不在3到10字符之间，请检查后再试");
			return;
		}
		//#####################输入和验证重复密码部分##########################################################
		System.out.print("请输入重复密码：");
		String password2=input.next();
		if(!password1.equals(password2)){
			System.err.println("您输入的重复密码有误，请检查后再试");
			return;
		}
		//#####################输入和验证姓名部分##########################################################
		System.out.print("请输入您的姓名(姓名长度在2到5个字符之间)：");
		String name=input.next();
		if(name==null || name.trim().length()==0){
			System.err.println("您输入的姓名为空，请输入姓名再试");
			return;
		}
		if(name.length()<2 || name.length()>5){
			System.err.println("您输入的姓名长度有误，姓名长度在2到5个字符之间，请输入姓名再试");
			return;
		}
		//#####################输入和验证性别部分##########################################################
		System.out.print("请输入您的性别(请输入：男 或者 女)：");
		String sex=input.next();
		if(sex==null || sex.trim().length()==0){
			System.err.println("您输入的性别为空，请输入性别再试");
			return;
		}
		if(sex.length()!=1){
			System.err.println("您输入的性别有误，请输入性别再试");
			return;
		}
		if(!sex.equals("男") && !sex.equals("女")){
			System.err.println("您输入的性别不在男 或者 女 之间，请输入性别再试");
			return;
		}
		//#####################输入和验证出生年月日部分##########################################################
		System.out.print("请输入您的出生年月日(格式如下：2022-10-01)：");
		String birthday=input.next();
		if(birthday==null || birthday.trim().length()==0){
			System.err.println("您输入的出生日期为空，请输入生日期再试");
			return;
		}
		try {
			SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
			Date date=sdf.parse(birthday);//把字符串的日期转换成日期对象，用来判断用户输入的字符串是不是正确格式
		} catch (ParseException e) {
			System.err.println("您输入的出生日期有误，请输入生日期再试");
			return;
		}
		
		//给user对象各个属性赋值
		User user=new User();
		user.setName(name);
		user.setSex(sex);
		user.setMobile(mobile);
		user.setPassword(password1);
		user.setBirthday(birthday);
		user.setRegtime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
		
		//操作数据库部分
		UserDao userDao=new UserDao();
		int num=userDao.add(user);
		System.out.println(num==1 ? "注册成功" : "注册失败");
	}
	
	
	public static void login(){
		try {
			//获取用户输入的登录信息
			Scanner input=new Scanner(System.in);
			System.out.print("请输入您的账号：");
			String mobile=input.next();
			System.out.print("请输入您的密码：");
			String password=input.next();
			
			UserDao userDao=new UserDao();
			//检查账号是否存在
			User check=userDao.selectByMobile(mobile);
			if(check==null){//没有账号
				System.out.println("您输入的账号不正确，请检查！");
				return;
			}
			//把登录信息传递给user中对应的属性
			User user=new User();
			user.setMobile(mobile);
			user.setPassword(password);
			
			//从数据库中校验数据是否正确
			User online=userDao.login(user);
			
			System.out.println(online==null ? "您输入的密码错误" : online);
		}catch (Exception e){
			e.printStackTrace();
		}
	}
	
	public static void selectOne(){
		UserDao userDao=new UserDao();
		User user=userDao.selectOne(1);
		System.out.println(user!=null ? user : "查无此人");
	}
	public static void selectAll(){
		UserDao userDao=new UserDao();
		List<User> userList=userDao.selectAll();
		if(userList!=null && userList.size()>0){
			for(User user:userList){
				System.out.println(user);
			}
		}
	}
	
	public static void delete(){
		UserDao userDao=new UserDao();
		int num=userDao.delete(1);
		System.out.println(num==1 ? "删除成功" : "删除失败");
	}
	
	public static void update(){
		User user=new User();
		user.setId(1);
		user.setName("李四");
		user.setSex("女");
		user.setAge(20);
		
		UserDao userDao=new UserDao();
		int num=userDao.update(user);
		System.out.println(num==1 ? "修改成功" : "修改失败");
	}
	
	public static void add(){
		// User user=new User("齐七", "男", 21);
		// UserDao ud=new UserDao();
		// int num=ud.add(user);
		// System.out.println(num==1 ? "新增成功" : "新增失败");
	}
	
	//新增一条用户数据
	public static void demo1(){
		/*
			连接数据库的基本条件：
			1、需要连接mysql的驱动包的地址：com.mysql.cj.jdbc.Driver
			2、需要连接mysql的连接字符串/访问协议：jdbc:mysql://127.0.0.1:3306/oop
			3、需要连接mysql的账号：root
			4、需要连接mysql账号的密码：password
		 */
		String driver="com.mysql.cj.jdbc.Driver";//mysql的驱动地址
		String url="jdbc:mysql://127.0.0.1:3306/oop";//访问mysql数据库的字符串
		String username="root";//mysql账号
		String password="root";//mysql账号的密码password
		
		try {
			
			//新增数据需要两大步骤
			/*
			part1 注册驱动，获取mysql数据库的连接对象Connection
			 */
			//1-1 注册驱动
			//Class.forName(driver);
			//1-2 获取数据库连接
			Connection conn= DriverManager.getConnection(url, username, password);
			
			/*
			part2 执行sql语句
			 */
			User user=new User();
			user.setName("李四");
			user.setAge(19);
			user.setSex("女");
			
			//2-1 编写sql语句
			String sql="insert into user (name,age,sex) values(?,?,?)";
			//2-2 获取sql语句的预编译对象
			PreparedStatement pst=conn.prepareStatement(sql);
			//2-3 给预编译对象处理的sql语句赋值
			//索引都是0开始，但是 这个地方是1开始
			pst.setString(1,user.getName());//给第一个？赋值为 姓名
			pst.setInt(2, user.getAge());//给第2个？赋值为 年龄
			pst.setString(3, user.getSex());//给第3个？赋值为 性别
			//2-4 使用预编译sql对象pst来执行sql语句
			int count=pst.executeUpdate();//返回受影响的行数 (增加、修改、删除)
			
			System.out.println(count==1 ? "新增成功" : "新增失败");
			
			//2-5 关闭通道
			pst.close();//关闭预编译对象
			conn.close();//关闭连接对象
		}catch (Exception e){
			e.printStackTrace();
		}
	}
}
